import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;

import exceptions.ArgomentoNonValido;
import sessions.*;


public class Main {
	
	private int key;
	private Context jndiContext;
	private UtenteSBRemote interfacciaUtente;
	private RegistratoSBRemote interfacciaRegistrato;
	private AdminSBRemote interfacciaAdmin;
	private NonRegistratoSBRemote interfacciaNonRegistrato;
	
	
	
	public static void main(String[] args) {
		new GUI(new Main());
	}

	
	public void inizializza() {

		Hashtable<String, String> env = new Hashtable<String, String>();
		env.put(Context.INITIAL_CONTEXT_FACTORY,
				"org.jnp.interfaces.NamingContextFactory");
		env.put(Context.PROVIDER_URL,"localhost:1099");
		try {
			jndiContext = new InitialContext(env);
			Object ref = jndiContext.lookup("UtenteSBRemote");
			interfacciaUtente = (UtenteSBRemote) PortableRemoteObject.narrow(ref,UtenteSBRemote.class);
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}
	
	public boolean loginRegistrato(String mail, String nomeU, String password) throws ArgomentoNonValido{
		interfacciaRegistrato = interfacciaUtente.loginRegistrato(mail, nomeU, password);
		if(interfacciaRegistrato == null) {
			return false;
		}
		else {
			key = mail.hashCode() + password.hashCode() + nomeU.hashCode();
			return true;
		}
		
		
	}
	
	public boolean loginAdmin(String mail, String nomeU, String password) throws ArgomentoNonValido{
		interfacciaAdmin = interfacciaUtente.loginAdmin(mail, nomeU, password);
		if(interfacciaAdmin == null) {
			return false;
		}
		else {
			key = mail.hashCode() + password.hashCode() + nomeU.hashCode();
			return true;
		}
		
		
	}
	
	public boolean registrazioneUtente(String mail, String nomeU, String password, String nome, String cognome, String dataN, String cf) throws ArgomentoNonValido{
		return interfacciaUtente.registrazione(mail, nomeU, password, nome, cognome, dataN, cf);
		
		
	}
	
	
	
	

}